extends Control
const 格子场景= preload("res://格子.tscn")
@onready var tile_map_layer = $TileMapLayer
@onready var move_timer = $move_timer

var 贪吃蛇:Array[Vector2i]
var 当前方向:Vector2i=Vector2i.RIGHT
var 食物坐标=null
var 最大坐标:Vector2i=Vector2i(40,22)

func 初始化(data:Dictionary):
	初始化贪吃蛇()
	随机生成食物()
	显示贪吃蛇()	
	
func 退出():
	贪吃蛇.clear()
	食物坐标=null
	当前方向=Vector2i.RIGHT

func 显示贪吃蛇():
	for 格子 in tile_map_layer.get_children():
		tile_map_layer.remove_child(格子)
	
	for i in range(贪吃蛇.size()):
		var 格子=格子场景.instantiate()
		tile_map_layer.add_child(格子)
		格子.position=tile_map_layer.map_to_local(贪吃蛇[i])-Vector2(24,24)
		格子.color_rect.color=(Color(0,pow(0.9,i),0,1))
		
	var 格子=格子场景.instantiate()
	tile_map_layer.add_child(格子)
	格子.position=tile_map_layer.map_to_local(食物坐标)-Vector2(24,24)	
	格子.设置为食物()
		
func _on_move_timer_timeout():
	贪吃蛇移动()
	显示贪吃蛇()
	
func 初始化贪吃蛇():
	贪吃蛇.append(获取随机坐标())
	
func 贪吃蛇移动():
	var 尾部=贪吃蛇[贪吃蛇.size()-1]
	for i in range(贪吃蛇.size()-1,0,-1):	
		贪吃蛇[i]=贪吃蛇[i-1]
	贪吃蛇[0]=贪吃蛇[0]+当前方向
	if 贪吃蛇[0]==食物坐标:
		贪吃蛇.append(尾部)
		move_timer.wait_time=move_timer.wait_time*0.975
		print(move_timer.wait_time)
		随机生成食物()
	if 判断失败():
		move_timer.stop()
		GameViewManager.打开弹窗("game_over")

func _input(event):
	if event.is_action_pressed("ui_down"):
		if 当前方向!=Vector2i.UP:
			当前方向=Vector2i.DOWN
	elif event.is_action_pressed("ui_up"):
		if 当前方向!=Vector2i.DOWN:
			当前方向=Vector2i.UP
	elif event.is_action_pressed("ui_right"):
		if 当前方向!=Vector2i.LEFT:
			当前方向=Vector2i.RIGHT
	elif event.is_action_pressed("ui_left"):
		if 当前方向!=Vector2i.RIGHT:
			当前方向=Vector2i.LEFT

func 随机生成食物():
	食物坐标=获取随机坐标()

func 获取随机坐标():
	while true:
		var 坐标:Vector2i
		坐标.x=randi_range(5,34)
		坐标.y=randi_range(5,16)
		if not 贪吃蛇.has(坐标):
			return 坐标

func 判断失败():
	for i in range(1,贪吃蛇.size()-1):
		if 贪吃蛇[0]==贪吃蛇[i]:
			return true
	if 贪吃蛇[0].x>=40 or 贪吃蛇[0].x<0 or 贪吃蛇[0].y>=22 or 贪吃蛇[0].y<0:
		return true
	return false
